# 编译器和编译选项
CC = gcc
CFLAGS = -Wall -g  # -Wall显示警告，-g生成调试信息
SERVER_LIBS = -pthread  # 服务端需要多线程库

# 目录定义（对应项目结构）
SERVER_DIR = server
CLIENT_DIR = client

# 服务端源文件和目标
SERVER_SRCS = $(SERVER_DIR)/main.c $(SERVER_DIR)/config.c $(SERVER_DIR)/network.c $(SERVER_DIR)/student.c $(SERVER_DIR)/file.c $(SERVER_DIR)/log.c
SERVER_OBJS = $(SERVER_SRCS:.c=.o)  # 把.c替换为.o
SERVER_TARGET = $(SERVER_DIR)/server  # 服务端可执行文件路径

# 客户端源文件和目标
CLIENT_SRCS = $(CLIENT_DIR)/main.c $(CLIENT_DIR)/config.c $(CLIENT_DIR)/network.c $(CLIENT_DIR)/log.c
CLIENT_OBJS = $(CLIENT_SRCS:.c=.o)
CLIENT_TARGET = $(CLIENT_DIR)/client  # 客户端可执行文件路径

# 默认目标：编译服务端和客户端
all: $(SERVER_TARGET) $(CLIENT_TARGET)
	@echo "编译完成！服务端：$(SERVER_TARGET)，客户端：$(CLIENT_TARGET)"

# 编译服务端
$(SERVER_TARGET): $(SERVER_OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(SERVER_LIBS)
	@echo "服务端编译完成"

# 编译客户端
$(CLIENT_TARGET): $(CLIENT_OBJS)
	$(CC) $(CFLAGS) -o $@ $^
	@echo "客户端编译完成"

# 自动生成.o文件（%.o对应%.c）
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# 清理编译生成的文件
clean:
	rm -f $(SERVER_OBJS) $(SERVER_TARGET)
	rm -f $(CLIENT_OBJS) $(CLIENT_TARGET)
	@echo "清理完成"